//
//  ZBuserInfoModelViewOuath.swift
//  ZBWb
//
//  Created by 天隐翎 on 16/4/13.
//  Copyright © 2016年 csdn. All rights reserved.
//

import UIKit

import SVProgressHUD

private let userInfokey = "com.itheima.userifonKey"

class ZBuserInfoModelViewOuath: NSObject {

//    设置单例
    static let shareInfoModelViewOuath:ZBuserInfoModelViewOuath = ZBuserInfoModelViewOuath()
//    设置属性
    var userAccount:ZBuserAccount?
    
//    增加一个头像NSURL类型的属性
    var headImageURL:NSURL?{
        let url = NSURL(string: userAccount?.avatar_large ?? "")
        return url
        
    }
    //添加一个计算性属性(只读属性)
    var userLogin: Bool {
        //1.UserAccount的token 如果不为空 && 用户token不过期 用户已经登录
        //  没有过期  -> 过期日期(2016.4.22) 和 当前日期(2016.4.11)比较  -> 过期日期大于 当前日期
        if let u = userAccount where u.expires_date?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
            
            return true
        }
        //将userAccount 设置为 nil
        userAccount = nil
        return false
    }
    
    
//    私有化构造函数,这样外部就不能代用init方法了,只能通过单例创建
    private override init() {
        super.init()
//       如果用户的账号信息已经存在了,那么直接从沙盒中读取赋值给属性
        userAccount = self.loadInfo()
    }
}

//    MARk用户登录相关的网页请求
extension ZBuserInfoModelViewOuath {
//        MARK使用授权码,请求accesstoken
   func loadcode(code:String,finished:(isSuccess: Bool)->()){
            //        事先封装好的请求方法
    ZBNetWorkTool.sharedTools.loadAccessToken(code) { (result, error) -> () in
        
        if error != nil{
            print(error)
            //                SVProgressHUD.showErrorWithStatus("出错误了")
            finished(isSuccess: false)
            return
        }
        print("授权成功")
        //            授权成功,在请求成功的回调中,再去获取用户信息
        self.loadViewInfo(result!, finished: finished)
        
    }
}
    
    //使用授权码,请求accesstoken
//    func loadcode(code:String,finished:(isSuccess: Bool)->()) {
//        let url = "https://api.weibo.com/oauth2/access_token"
//        
//        //        设置参数
//        let parameters = ["client_id":client_id,"client_secret":client_secret,"grant_type": "authorization_code","code":code,"redirect_uri":redirect_uri]
//        //        事先封装好的请求方法
//        ZBNetWorkTool.sharedTools.request(.POST, urlString: url, parameters: parameters) { (result, error) -> () in
//            
//            if error != nil{
//                print(error)
////                SVProgressHUD.showErrorWithStatus("出错误了")
//                finished(isSuccess: false)
//                return
//            }
//            print("授权成功")
//            print(result)
//            
//            
//        }
//        
//        
//    }
    
    //    使用token获取用户信息
    private  func loadViewInfo(result: AnyObject,finished: (isSuccess:Bool)->()) {
        //尝试将AnyObject转换为字典
        guard let dict = result as? [String: AnyObject] else {
            SVProgressHUD.showErrorWithStatus("数据错误")
            return
            
        }
        let token = dict["access_token"]!
        let uid = dict["uid"]!
        
//        //        在result中获取token,uid
//        let urlString = "https://api.weibo.com/2/users/show.json"
//        //        字典数组中不能添加为nil
//        let parameters = ["access_token": token, "uid": uid]
        
        ZBNetWorkTool.sharedTools.loadUserInfo(token, uid: uid) { (result, error) -> () in
            
//        }
        
//        ZBNetWorkTool.sharedTools.request(.GET, urlString: urlString, parameters: parameters) { (result, error) -> () in
            if error != nil {
                print(error)
//                SVProgressHUD.showErrorWithStatus("世界上最遥远的距离就是没有网络")
                finished(isSuccess: false)
                return
            }
            print("获取用户信息成功")
//            print(result)
            
            
            //            将AnyObject转换为字典类型
            guard var userInfodic = result as? [String : AnyObject] else {
//                SVProgressHUD.showErrorWithStatus("数据结构错误")
                finished(isSuccess: false)
                return
                
            }
            //            合并字典
            for(k,v) in dict{
                userInfodic[k] = v
                
            }
//            print(userInfodic)
            //           偏好设置
            let userDefauls = NSUserDefaults.standardUserDefaults()
            
            
//            洗数据
            //            字典转模型
            let account = ZBuserAccount(dict: userInfodic)
            //            获得模型对象字典模型对象
            let keys = ["access_token","avatar_large","name","expires_in","uid"]
            
            let accountDict = account.dictionaryWithValuesForKeys(keys)
            
            //            将对象保存到偏好设置中
            userDefauls.setObject(accountDict, forKey: userInfokey)
            
            //            同步
            userDefauls.synchronize()
//            执行回调
            finished(isSuccess: true)
            
//            print(NSHomeDirectory())
        }
        
    }
  
}

//封装保存到偏好设置的方法
extension ZBuserInfoModelViewOuath{
    
    func saveAccountdict(userinfodict: [String :AnyObject]){
        
    //           偏好设置
    let userDefauls = NSUserDefaults.standardUserDefaults()
    //            字典转模型
    let account = ZBuserAccount(dict: userinfodict)
//        给单例对象的用户账户模型属性赋值,
    userAccount = account
        
    //            获得模型对象字典模型对象
    let keys = ["access_token","avatar_large","name","expires_in","uid"]
    
    let accountDict = account.dictionaryWithValuesForKeys(keys)
    
    //            将对象保存到偏好设置中
    userDefauls.setObject(accountDict, forKey: userInfokey)
    
    //            同步
    userDefauls.synchronize()
    
    //            执行回调
    }
    
//    获取偏好设置中的信息,如果是已经登录的状态,就直接进入页面,不用再去登录
    func loadInfo() -> ZBuserAccount?{
        
//        获取字典数据
        guard let dict = NSUserDefaults.standardUserDefaults().objectForKey(userInfokey) as? [String : AnyObject] else
        {
            return nil
        }
//        将字典转换为模型
       let account = ZBuserAccount(dict: dict)
       return account
    }
  
    
}

